package com.zy.design.demo.behavioral;

/**
 * 访问者模式
 * 特点：将操作与对象结构分离，在不改变对象结构的前提下定义新操作。（jar包操作）
 */
interface Visitor {
    void visit(ElementA a);
    void visit(ElementB b);
}

interface Element {
    void accept(Visitor visitor);
}

class ElementA implements Element {
    public void accept(Visitor visitor) { visitor.visit(this); }
}

class ElementB implements Element {
    public void accept(Visitor visitor) { visitor.visit(this); }
}

class ConcreteVisitor implements Visitor {
    public void visit(ElementA a) { System.out.println("访问元素A"); }
    public void visit(ElementB b) { System.out.println("访问元素B"); }
}

class Main4 {
    public static void main(String[] args) {
        Element[] elements = { new ElementA(), new ElementB() };
        Visitor visitor = new ConcreteVisitor();

        for (Element e : elements) {
            e.accept(visitor);
        }
    }
}
